// 67. 二进制求和

// 给你两个二进制字符串，返回它们的和（用二进制表示）。

// 输入为 非空 字符串且只包含数字 1 和 0。

//

// 示例 1:

// 输入: a = "11", b = "1"
// 输出: "100"
// 示例 2:

// 输入: a = "1010", b = "1011"
// 输出: "10101"

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/add-binary
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

/**
 * @param {string} a
 * @param {string} b
 * @return {string}
 */
var addBinary = function (a, b) {
	let maxLen
	if (a.length - b.length >= 0) {
		maxLen = a.length
		b = [...new Array(a.length - b.length).fill(0), ...b]
	} else {
		maxLen = b.length
		a = [...new Array(b.length - a.length).fill(0), ...a]
	}
	const result = new Array(maxLen).fill(0)
	for (let i = maxLen - 1; i >= 0; i--) {
		result[i] =
			result[i] + Number(a[i] ? a[i] : 0) + Number(b[i] ? b[i] : 0)
		if (result[i] >= 2) {
			result[i] = result[i] - 2
			result[i - 1] >= 0 ? result[i - 1]++ : result.unshift(1)
		}
	}
	return result.join('')
}
console.log('[ addBinary(11,1) ] >', addBinary('11', '1'))
